* {
    margin: 0;
    padding: 0;
    list-style: none;
    box-sizing: border-box;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}

.lee-gesture-password {
    display: flex;
    flex-wrap: wrap;
    height: 100%;
    justify-content: space-between;
    color: var(--color);position: relative;
}

.lee-gesture-password .tips {
    position: absolute;
    left: 50%;
    top: 50%;
    background: rgba(0, 0, 0, .8);
    width: 90px;height: 90px;border-radius: 8px;
    transform: translate(-50%,-50%);
    transition: all .5s;
    opacity: 0;
    text-align: center;line-height: 90px;color: #fff;font-size: 16px;
}
.lee-gesture-password .circle{
    width: 33.33%;
    height: 33.33%;
    display: flex;
    align-items: center;
    justify-content: center;
}
.lee-gesture-password .dot {
    width: calc(var(--radius) * 2px);
    height: calc(var(--radius) * 2px);
    border-radius: 100%;
    border: solid 1px currentColor;
    display: flex;
    align-items: center;
    justify-content: center;
}

.lee-gesture-password .dot i {
    width: 26px;
    height: 26px;
    background: currentColor;
    border-radius: 100%;
    transition: all .2s;
    opacity: 0;
}

.lee-gesture-password .dot:nth-child(3n) {
    margin-right: 0
}

.lee-gesture-password.error {
    color: var(--errcolor);
    animation: shake .15s
}

.lee-gesture-password.error .dot {
    border-width: 3px;
}

@keyframes shake {
    0% {
        transform: translateX(0);
    }

    25% {
        transform: translateX(-20px);
    }

    50% {
        transform: translateX(0);
    }

    75% {
        transform: translateX(20px);
    }

    100% {
        transform: translateX(0);
    }
}
